在過去,釣魚郵件常常因為語法錯誤、語氣生硬而容易被識破。隨著大型語言模型(LLM,例如 GPT 系列)的崛起,攻擊者現在可以輕易地生成語氣自然、內文流暢、甚至針對特定目標客製化的釣魚郵件,使得傳統的關鍵字或規則過濾變得越來越困難。
用 Python 和 OpenAI 的 API 來建立一個簡單的偵測腳本。你可以輕易地將它換成 Google Gemini 或其他大型語言模型的 API。
步驟 1:環境設置

步驟 2:撰寫 Python 程式碼
接收郵件的內文,然後呼叫 AI 進行分析。核心在於要給 AI 一個非常明確的「指令」(Prompt),告訴它要扮演什麼角色,以及要分析哪些面向。
. 核心設定與初始化
import os / import openai:
導入 Python 的 os 模組來讀取環境變數(API 金鑰)。
導入 openai 函式庫,這是呼叫 OpenAI 模型的官方工具。
client = openai.OpenAI(api_key=os.environ.get("OPENAI_API_KEY")):
初始化 OpenAI 客戶端物件(client)。
它會自動從環境變數 OPENAI_API_KEY 中讀取您的金鑰。這是最佳實踐,因為它避免將金鑰寫死在程式碼中。
定義主要的偵測函式,接收兩個參數:郵件的主旨 (email_subject) 和內文 (email_body)。
user_message = f"郵件主旨:{email_subject}\n\n郵件內文:\n{email_body}":
將主旨和內文組合成一個乾淨的單一字串,這是要傳遞給 AI 的使用者輸入。

system_prompt = """...""":
這段多行字串定義了 AI 的系統指令。它告訴模型要扮演什麼角色、它的任務(偵測釣魚郵件)、以及它要分析的四個核心面向:
急迫性: 判斷是否有時間壓力。
發信人偽裝: 判斷發信人身份是否可信。
可疑連結/指令: 判斷是否有高風險的操作要求。
不尋常的要求: 判斷是否索取敏感資料。
強制 JSON 格式要求:
在 system_prompt 的結尾,明確要求 AI 必須回傳一個特定結構的 JSON 物件。這個 JSON 結構包括:is_phishing (結果判斷)、confidence_score (信心分數)、analysis (摘要)、以及 red_flags (危險訊號清單)。
model="gpt-4o":
指定要使用的 LLM 模型。gpt-4o 是目前功能最強大且速度快的模型,適合此類複雜的分析任務。
messages=[...]:
這是聊天模型 API 呼叫中傳遞對話歷史的關鍵結構。這裡我們傳遞了兩條訊息:
{"role": "system", "content": system_prompt}:AI 的人設與規則。
{"role": "user", "content": user_message}:待分析的郵件內容。
response_format={"type": "json_object"}:
這是強制結構化輸出的官方指令。它讓模型知道它唯一的任務就是生成一個 JSON 物件,大大提高了輸出格式的穩定性和可靠性。
return response.choices[0].message.content:
如果 API 呼叫成功,則從回應物件中取出模型生成的 JSON 字串並回傳。
這是一個標準的錯誤處理區塊。它能捕捉在 API 呼叫過程中可能發生的任何問題(例如網路連線失敗、API 金鑰錯誤、模型處理超時等)。如果發生錯誤,它會回傳一條錯誤訊息而不是讓程式崩潰。

測試範例:
輸出結果:
本篇重點:
1. AI vs. AI (Defense against AI-Generated Threats):
目標: 這是整個專案的動機。傳統過濾器擋不住 AI 寫出的釣魚郵件,所以我們必須利用 LLM(GPT-4o)的語義理解能力,來找出郵件中隱藏的惡意意圖。
嚴格的角色設定與規則 (Prompt Engineering is Key):
2.透過 system_prompt,將 LLM 訓練成一位專業資安分析師。
這個 Prompt 不只是給一段文字,而是給了 AI 四個非常具體的「查案重點」(急迫性、發信人偽裝、連結可疑性、敏感資訊要求),確保它不會亂猜,而是進行系統性的結構化分析。
3.強制結構化輸出 (Enforcing JSON Output):
關鍵參數: 使用 response_format={"type": "json_object"}。
目的:它強制模型只能回傳 JSON 格式的數據,這樣後續的程式才能 reliably(可靠地)讀取 is_phishing、confidence_score 等結果,進行自動化處理。
4.選擇高效能模型 (Model Selection):
模型: 選擇使用 gpt-4o。
原因: 由於偵測釣魚郵件需要高度的判斷力、理解微妙的語氣和長篇內容,選擇功能強大且速度快的模型,可以確保分析結果的準確性和即時性。
最近在學習怎麼訓練模型,剛好可以跟資安防禦結合,用魔法打敗魔法!!!